#!/usr/bin/python
# -*- encoding: utf-8 -*-
'''
@File    :   4.py
@Time    :   2020/05/25 21:59:22
@Author  :   Malygos_l 
@Version :   1.0
@Contact :   751756061@qq.com
@WebSite :   www.gitee.com/malygos_l
'''

# Start typing your code from here
# 编写装饰器来实现，对目标函数进行装饰，分3种情况：目标函数无参数
# 无返回值，目标函数有参数，目标函数有返回值；
#      三个目标函数分别为：
#      A 打印输出20000之内的素数；
#      B 计算整数2-10000之间的素数的个数；
#      C 计算整数2-M之间的素数的个数；
#   可以观看给的视频材料，仿照示例来做；


#输出20000之内的素数
def A(func):
    def wrapper():
        print("begin A")
        print("打印输出20000内的素数")
        func()
        print("endA\n")

    return wrapper


@A
def no_parameter_return():
    for i in range(2, 20000):
        flag = 1
        for j in range(2, int(i / 2 + 1)):
            if i % j == 0:
                flag = 0
        if flag == 1:
            print(i)


# 计算整数2-10000之间的素数的个数
def B(func):
    def wrapper(*arg):
        print("begin B")
        return func(*arg)

    return wrapper


@B
def have_parameter(num):
    print("计算整数2-10000之间的素数的个数")
    for i in range(2, 10000):
        flag = 1
        for j in range(2, int(i / 2) + 1):
            if i % j == 0:
                flag = 0
        if flag == 1:
            num += 1
    print("The Number:%d" % num)
    print("end B\n")


# 计算整数2-M之间的素数的个数
def C(func):
    def wrapper():
        print("begin C")
        value = func()
        print("The Number:%d" % value)
        print("end C")
        return value

    return wrapper


@C
def have_return():
    M = input("请输入数字：")
    M = int(M)
    num = 0
    print("计算整数2-%d之间的素数的个数" % M)
    for i in range(2, M):
        flag = 1
        for j in range(2, int(i / 2 + 1)):
            if i % j == 0:
                flag = 0
        if flag == 1:
            num += 1
    return num


def main():
    no_parameter_return()
    have_parameter(0)
    have_return()


if __name__ == "__main__":
    main()